package modelLayer;

import java.util.ArrayList;
import java.util.Date;

/**
 * Aftale er superklassen, hvor man enten opretter udlaan eller ordre fra. Den indeholder alle oplysningerne omkring handlen.
 * 
 * @author (Gruppe 2. Jonas, Danny, Kasper, Bruno & Jesper) 
 * @version (17/12-2012)
 */
public class Aftale
{
    // Fields
    private ArrayList<DelOrdre> delOrdrer;
    private ArrayList<KoekkenBad> koekkenBads;
    private static int id;
    private Date dato;
    private String status;
    private Date leveringsfrist;
    private Person saelger;
    private Person kunde;
    private double totalpris;
    private PersonContainer p;

    /**
     * Constructor for objects of class Aftale
     */
    public Aftale(String status, Person saelger, Person kunde)
    {
        dato = new Date();
        this.status = status;
        this.leveringsfrist = leveringsfrist;
        this.saelger = saelger;
        this.kunde = kunde;
        delOrdrer = new ArrayList<DelOrdre>();
        koekkenBads = new ArrayList<KoekkenBad>();
        id++;
    }
    
    /**
     * Returnerer den dato der er sat paa en Aftale.
     */
    public String getDato()
    {
        return dato.toString();
    }

    
    /**
     * Tilfoejer en DelOrdre som indeholder et antal af én vare.
     */
    public void tilfoejDelOrdre(DelOrdre delOrdre)
    {
        delOrdrer.add(delOrdre);
        
        udregnTotalpris();
    }
    
    /**
     * Sletter DelOrdre.
     */
    public void sletDelOrdre(int id)
    {
        int i = 0;
        boolean found = false;
  
        while(i < delOrdrer.size() && !found)
        {
            if(delOrdrer.get(i).getIdAfVare() == id)
            {
                found = true;
                DelOrdre o = delOrdrer.get(i);
                delOrdrer.remove(o);
            }
            
            else
            {
                i++;
            }
        }
        
        
    }
    
    /**
     * Tilfoejer KoekkenBad til Arraylisten.
     */
    public void tilfoejKoekkenBad(KoekkenBad k)
    {
        koekkenBads.add(k);
    }
    
   /**
    * Sletter KoekkenBad fra ArrayListen, ved at soege paa koekkenNavn.
    */
   public void sletKoekkenBad(String koekkenNavn)
   {
       KoekkenBadContainer.getInstance().sletKoekken(koekkenNavn);
    }
   
    
    /**
     * Tilfoejer kunde til aftalen.
     * 
     * @param   p   Personen som er kunde af aftalen.
     * @return      Returnerer true hvis personen er tildelt aftalen, og false hvis personen ikke er kunde.
     */
    public boolean setKunde(Person p)
    {
        boolean succes = true;
        
        if (p.getKunde() != null) {
            kunde = p;
        } else {
            succes = false;
        }
        
        return succes;
    }
    
    /**
     * Tilfoejer saelger til aftalen.
     * 
     * @param   p   Personen som sælger aftalen.
     * @return      Returnerer true hvis personen er tildelt aftalen, og false hvis personen ikke er ansat.
     */
    public boolean setSaelger(Person p)
    {
        boolean succes = true;
        
        if (p.getAnsat() != null) {
            saelger = p;
        } else {
            succes = false;
        }
        
        return succes;
    }
    /**
     * Returnere id.
     */
    public int getId()
    {
        return id;
    }
    
    /**
     * Udregner totalprisen for alle ordrer i aftalen.
     */
    private void udregnTotalpris()
    {
        double totalpris = 0.0;
        
        // Regn summen ud af alle delordrer.
        for(DelOrdre dO : delOrdrer)
        {
            totalpris += dO.getSubtotal();
        }
        
        // Regn håndværkerrabatten ud, hvis kunden er en erhvervskunde.
        if (kunde.getKunde() instanceof Erhverv)
        {
            totalpris = Rabat.udregnHaandvaekerrabatPris(totalpris);
        }
        
        this.totalpris = totalpris;
    }
    /**
     * Returnerer total prisen.
     */
    public double getTotalpris()
    {
        return totalpris;
    }
    /**
     * Returnerer et objekt af typen delOrdrer fra ArrayListen<DelOrdre>.
     */
    public ArrayList<DelOrdre> getDelOrdrer()
    {
        return delOrdrer;
    }
}
